#coding: utf-8
'''
Created on 25/05/2013

@author: Vagner Clementino
Código fonte da questão 01 da lista 02 da disciplina Criptografia
'''

import random
import caractereManipulador
SEMENTE = "vagner clementino dos santos e andreza vieira lelis da silva"

def int_gerenator(num_digitos):
    '''
        Gera aleatóriamente, com base na semente fornecida,
        um inteiro impar de tamanho igual a n,
        onde n é o número de dígitos fornecidos na variável 'num_digitos'
    '''
    ultimo_algaritmo = [1,3,5,7,9]
    tamanho_semente = len(SEMENTE)
    
    if num_digitos == 1:
        #Se o número impar for de 01 digito apenas escolhe aleatóriamente da lista 
        #ultimo algaritmo
        i = random.randint(0,4)
        inteiro_gerado = ultimo_algaritmo[i]
    else:
        #Caso contrário gera-se o primeiro digito do número de forma altetória
        #com base na semente
        i = random.randint(0,(tamanho_semente-1))
        aux_string = caractereManipulador.mapeamento_caractere(SEMENTE[i])
        
        #Gerado o primeiro dígito da esquerda para direita,
        #continua gerando os digitos até a quantidade de dígitos
        #ultrapasse a estipulada na variável "num_digitos"       
        while len(aux_string) < num_digitos:       
            i = random.randint(0,(tamanho_semente-1))
            aux_string += caractereManipulador.mapeamento_caractere(SEMENTE[i])
                    
        #Durante a geração do inteiro pode ocorrer dele ser gerado
        #com o tamanho maior do que o desejado. Efetua-se a correção
        #recortando os (n-1) digitos do número, contando da direita para
        #esquerda, e atribui estes digitos para a variável
        #inteiro_como_string
        inteiro_como_string = aux_string[:(num_digitos-1)]
        #Para garantir que o número a ser gerado seja impar
        #adiciona aleatóriamente no último digito do número
        #um valor da lista ultimo_digitos
        i = random.randint(0,4)
        inteiro_como_string += str(ultimo_algaritmo[i])
        #Convertando a string representando o valor em um inteiro.   
        inteiro_gerado = int(inteiro_como_string)        
    return inteiro_gerado